#ifndef INTELGPUMONITOR_H
#define INTELGPUMONITOR_H

#include <gpu_monitor_interface.h>
#include <string>
#include <fstream>
#include <sstream>
#include <iomanip>
#include <cstdio>
#include <chrono>

class IntelGpuMonitor : public GpuMonitorInterface
{
public:
    IntelGpuMonitor();
    ~IntelGpuMonitor();

    double getGpuCoreUsage() override;

    double getGpuMemUsage() override;

private:
    // 获取系统可用物理内存（单位：字节）
    unsigned long long getAvailableSystemMemory();

    void find_intel_gpu_path();

    std::string gpu_dev_path;
    
    std::string gem_objects_path;      // i915_gem_objects文件的完整路径
    
    // 缓存相关
    static constexpr int CACHE_TIMEOUT_MS = 1000;  // 缓存超时时间（毫秒）
    double cached_mem_usage = 0.0;                 // 缓存的内存使用率
    std::chrono::steady_clock::time_point last_update_time;  // 上次更新时间
    
    void find_gem_objects_path();      // 查找i915_gem_objects文件路径
};

#endif // INTELGPUMONITOR_H